// 给定一个链表，按顺序每两个节点交换以下，并返回交换后的链表，要求需要实际进行节点交换，而不是只改变节点内部的值

// 思路：需要虚拟节点，指向cur.next和cur.next.next进行交换处理，并更新cur
// 时间复杂度：O(n)，n是链表的节点数
// 空间复杂度：O(1)

const { LinkedList, ListNode } = require("./64.设计链表")

function swapPairs(head) {
    let dummyHead = new ListNode(0, head)
    let cur = dummyHead
    while (cur.next && cur.next.next) {
        let node1 = cur.next
        let node2 = cur.next.next
        node1.next = node2.next
        node2.next = node1
        cur.next = node2
        cur = node1
    }
    return dummyHead.next
}

let head = [1,2,3,4]
const list = new LinkedList(head)
console.log(swapPairs(list.head))